package com.lock;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import org.junit.Test;

/**
 * @author: csh
 * @Date: 2021/12/19 11:53
 * @Description:
 * 针对5，补充说明：
 * 当java虚拟机初始化一个类时，要求它的所有父类都已经被初始化，但是这条规则并不适用于接口;
 * 在初始化一个类时，并不会先初始化它所实现的接口
 * 在初始化一个接口时，并不会先初始化它的父接口
 * 因此，一个父接口并不会因为它的子接口或者实现的实始化而初始化。只有当程序首次使用特定接口的静态字段时，才会导致该
 *
 */
public class ActiveUse3 {
    @Test
    public void test1(){
        try {
            Class.forName("com.lock.Order");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void test2(){
        System.out.println(Son.num);
    }

    @Test
    public void test3(){
        System.out.println(CompareC.NUM1);
    }

    @Test
    public void test4(){
        System.out.println(Son.num);
    }

    public static void main(String[] args) {
        System.out.println("hello");
    }
}

class Father{
    static {
        System.out.println("Father类的初始化过程");
    }
}

class Son extends Father implements CompareB{
    static {
        System.out.println("Son类的初始化过程");
    }
    public static int num = 1;
}

interface CompareB{
    public static final Thread t = new Thread()
    {
        {
            System.out.println("CompareB的初始化");
        }
    };

    public default  void method1(){
        System.out.println("您好！");
    }
}

interface CompareC extends CompareB{
    public static  final  Thread t  = new Thread(){
        {
            System.out.println("CompareC的初始化");

        }
    };
    public static final Integer NUM1 = 1;
}
